﻿
using System;
using System.Data;

using Microsoft.Win32;

namespace CentroVentas.Clases.Utiles
{
    enum TipoMensaje{
        OK,ERROR
    }

    class Utilidades
    {
        public static DataSet GetRegiones()
        {
            try
            {
                DataSet ds = new DataSet();
                DataBase db = DataBase.GetInstance();
                db.dadap.SelectCommand = new System.Data.SqlClient.SqlCommand("SELECT id AS 'Id',nombre AS 'Nombre' FROM region",db.Conn);
                db.dadap.Fill(ds, "regiones");
                return ds;
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
                throw new Exception("No es posible rescatar las regiones");
            }
        }

        public static DataSet GetProvincias(int region)
        {
            try
            {
                DataSet ds = new DataSet();
                DataBase db = DataBase.GetInstance();
                db.dadap.SelectCommand = new System.Data.SqlClient.SqlCommand("SELECT id AS 'Id',nombre AS 'Nombre' FROM provincia WHERE region = @region", db.Conn);
                db.dadap.SelectCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@region",SqlDbType.Int)).Value = region;
                db.dadap.Fill(ds, "provincias");
                return ds;
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
                throw new Exception("No es posible rescatar las provincias");
            }
        }

        public static DataSet GetComunas(int provincia)
        {
            try
            {
                DataSet ds = new DataSet();
                DataBase db = DataBase.GetInstance();
                db.dadap.SelectCommand = new System.Data.SqlClient.SqlCommand("SELECT id AS 'Id',nombre AS 'Nombre' FROM comuna WHERE provincia = @provincia", db.Conn);
                db.dadap.SelectCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@provincia", SqlDbType.Int)).Value = provincia;
                db.dadap.Fill(ds, "comunas");
                return ds;
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
                throw new Exception("No es posible rescatar las comunas");
            }
        }

        public static void mensaje(TipoMensaje tipomensaje,string mensaje,int numero){
            if (tipomensaje == TipoMensaje.OK)
            {
                System.Windows.Forms.MessageBox.Show(mensaje, "ElectronVentas", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information);
            }
            else
            {
                string codigo = numero.ToString().PadLeft(8,'0');
                System.Windows.Forms.MessageBox.Show(mensaje + "\n" + "Codigo de error: ER-" + codigo, "ElectronVentas", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Exclamation);
            }            
        }

        /// <summary>
        /// Establece la propiedad para que la aplicación inicie al arrancar el sistema operativo.
        /// </summary>
        /// <param name="strName">Nombre de la aplicación.</param>
        /// <param name="strExecutable">Ruta Ejecutable</param>
        /// <param name="valor"></param>        
        public static void AppStarUp(string strName, string strExecutable)
        {
            RegistryKey objKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
            objKey.SetValue(strName, strExecutable);
        }

        private static string RellenarCadenaPorLaIzquierda(string cadena, char relleno, int tamanio)       
        {
            string cadenaRellenada = cadena;
            while (cadenaRellenada.Length < tamanio)
                cadenaRellenada = relleno + cadenaRellenada;
            return cadenaRellenada;
        }

        public static string ConvertirDobleAMontoEnLetras(double cantidad, string moneda, string postfijoMontoEnLetras)
        {
            string res, dec = "";
            int entero;
            int decimales;
            entero = Convert.ToInt32(Math.Truncate(cantidad));
            decimales = Convert.ToInt32(Math.Round((cantidad - entero) * 100, 2));
            dec = " CON " + RellenarCadenaPorLaIzquierda(decimales.ToString(), '0', 2) + "/100";
            res = ToText(Convert.ToDouble(entero)) + " " + moneda.ToUpper().Trim() + dec + " " + postfijoMontoEnLetras.ToUpper().Trim();
            return res;
        }

        private static string ToText(double value)
        {
            string Num2Text = "";
            value = Math.Truncate(value);
            if (value == 0) Num2Text = "CERO";
            else if (value == 1) Num2Text = "UNO";
            else if (value == 2) Num2Text = "DOS";
            else if (value == 3) Num2Text = "TRES";
            else if (value == 4) Num2Text = "CUATRO";
            else if (value == 5) Num2Text = "CINCO";
            else if (value == 6) Num2Text = "SEIS";
            else if (value == 7) Num2Text = "SIETE";
            else if (value == 8) Num2Text = "OCHO";
            else if (value == 9) Num2Text = "NUEVE";
            else if (value == 10) Num2Text = "DIEZ";
            else if (value == 11) Num2Text = "ONCE";
            else if (value == 12) Num2Text = "DOCE";
            else if (value == 13) Num2Text = "TRECE";
            else if (value == 14) Num2Text = "CATORCE";
            else if (value == 15) Num2Text = "QUINCE";
            else if (value < 20) Num2Text = "DIECI" + ToText(value - 10);
            else if (value == 20) Num2Text = "VEINTE";
            else if (value < 30)
            {
                string segundaCifra;
                if ((value % 20).Equals(1))
                {
                    segundaCifra = "UN";
                }
                else
                {
                    segundaCifra = ToText(value % 20);
                }
                Num2Text = "VEINTI" + segundaCifra;
            }
            else if (value == 30) Num2Text = "TREINTA";
            else if (value == 40) Num2Text = "CUARENTA";
            else if (value == 50) Num2Text = "CINCUENTA";
            else if (value == 60) Num2Text = "SESENTA";
            else if (value == 70) Num2Text = "SETENTA";
            else if (value == 80) Num2Text = "OCHENTA";
            else if (value == 90) Num2Text = "NOVENTA";
            else if (value < 100)
            {
                string segundaCifra;
                if ((value % 10).Equals(1))                
                    segundaCifra = "UN";
                else
                    segundaCifra = ToText(value % 10);
                
                Num2Text = ToText(Math.Truncate(value / 10) * 10) + " Y " + segundaCifra;
            }
            else if (value == 100) Num2Text = "CIEN";
            else if (value < 200) Num2Text = "CIENTO " + ToText(value - 100);
            else if ((value == 200) || (value == 300) || (value == 400) || (value == 600) || (value == 800)) Num2Text = ToText(Math.Truncate(value / 100)) + "CIENTOS";
            else if (value == 500) Num2Text = "QUINIENTOS";
            else if (value == 700) Num2Text = "SETECIENTOS";
            else if (value == 900) Num2Text = "NOVECIENTOS";
            else if (value < 1000) Num2Text = ToText(Math.Truncate(value / 100) * 100) + " " + ToText(value % 100);
            else if (value == 1000) Num2Text = "MIL";
            else if (value < 2000) Num2Text = "MIL " + ToText(value % 1000);
            else if (value < 1000000)
            {
                Num2Text = ToText(Math.Truncate(value / 1000)) + " MIL";
                if ((value % 1000) > 0)
                    Num2Text = Num2Text + " " + ToText(value % 1000);
            }
            else if (value == 1000000) Num2Text = "UN MILLON";
            else if (value < 2000000) Num2Text = "UN MILLON " + ToText(value % 1000000);
            else if (value < 1000000000000)
            {
                Num2Text = ToText(Math.Truncate(value / 1000000)) + " MILLONES ";
                if ((value - Math.Truncate(value / 1000000) * 1000000) > 0)
                    Num2Text = Num2Text + " " + ToText(value - Math.Truncate(value / 1000000) * 1000000);
            }
            else if (value == 1000000000000) Num2Text = "UN BILLON";
            else if (value < 2000000000000) Num2Text = "UN BILLON " + ToText(value - Math.Truncate(value / 1000000000000) * 1000000000000);
            else
            {
                Num2Text = ToText(Math.Truncate(value / 1000000000000)) + " BILLONES";
                if ((value - Math.Truncate(value / 1000000000000) * 1000000000000) > 0)
                    Num2Text = Num2Text + " " + ToText(value - Math.Truncate(value / 1000000000000) * 1000000000000);
            }
            return Num2Text;
        }

    }
}
